package com.atguigu.zk2;

import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;

import java.io.IOException;
import java.util.List;

/*
    客户端 ：监听父节点，并获取父节点中的子节点的内容。
    1.创建zk客户端对象
    2.判断父节点是否存在（监听父节点---定义先启动服务器再启动客户端也可以不判断）
    3.获取子节点（谁在线谁挂了）并监听
    4.客户端不能死（一直监听服务器的状态）

 */
public class ZKClient {
    private static ZooKeeper zk;

    public static void main(String[] args) throws Exception {
//        1.创建zk客户端对象
        String connectString = "hadoop102:2181,hadoop103:2181,hadoop104:2181";
        zk = new ZooKeeper(connectString, 4000, new Watcher() {
            public void process(WatchedEvent event) {
            }
        });
//        2.判断父节点是否存在（监听父节点---定义先启动服务器再启动客户端也可以不判断）
//        3.获取子节点（谁在线谁挂了）并监听
        listener();
//        4.客户端不能死（一直监听服务器的状态）
        Thread.sleep(Long.MAX_VALUE);
    }

    public static void listener() throws KeeperException, InterruptedException {
        List<String> children = zk.getChildren("/parent", new Watcher() {
            public void process(WatchedEvent event) {
                //当监听事件发生后（节点发生改变）需要处理的业务逻辑代码
                //再次监听
                try {
                    listener();
                } catch (KeeperException e) {
                    e.printStackTrace();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });
        for (String child : children) {
            System.out.println(child);
        }
    }
}
